# _*_coding:utf-8 _*_
# @Time    :2020/3/25 15:38
# @Author  :lyc
# @Email   :lyc0209@qq.com
# @FileName: mysql.py

import pymysql
import json

def load_mysql():
    """
    从user.json中加载mysql连接信息
    :return:
    """
    with open('user.json', encoding='utf-8') as f:
        return json.load(f)["mysql"]

class Mysql:
    def __init__(self, charset="utf8mb4"):
        self.mysql = load_mysql()
        self.host = self.mysql["host"]
        self.port = int(self.mysql["port"])
        self.username = self.mysql["username"]
        self.password = self.mysql["password"]
        self.database = self.mysql["database"]
        self.charset = self.mysql["charset"]
        self.db = pymysql.connect(host=self.host, user=self.username, password=self.password, database=self.database, port=self.port, charset=self.charset)
        self.cursor = None

    def insertDB(self, sql):
        """ 插入数据库操作 """

        self.cursor = self.db.cursor()

        try:
            # 执行sql
            self.cursor.execute(sql)
            # tt = self.cursor.execute(sql)  # 返回 插入数据 条数 可以根据 返回值 判定处理结果
            # print(tt)
            self.db.commit()
            print("success")
        except:
            # 发生错误时回滚
            self.db.rollback()
            print("fail")
        finally:
            self.cursor.close()

    def deleteDB(self, sql):
        """ 操作数据库数据删除 """
        self.cursor = self.db.cursor()

        try:
            # 执行sql
            self.cursor.execute(sql)
            # tt = self.cursor.execute(sql) # 返回 删除数据 条数 可以根据 返回值 判定处理结果
            # print(tt)
            self.db.commit()
        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()

    def updateDb(self, sql):
        """ 更新数据库操作 """

        self.cursor = self.db.cursor()

        try:
            # 执行sql
            self.cursor.execute(sql)
            # tt = self.cursor.execute(sql) # 返回 更新数据 条数 可以根据 返回值 判定处理结果
            # print(tt)
            self.db.commit()
        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()

    def selectDbAll(self, sql):
        """ 数据库查询 所有"""
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql)  # 返回 查询数据 条数 可以根据 返回值 判定处理结果

            data = self.cursor.fetchall()  # 返回所有记录列表

            # print(data)

            # 结果遍历
            # 结果为元组形式
            url_list = []
            for row in data:
                url_list.append(row[0])
        except:
            print('Error: unable to fecth data')
        finally:
            self.cursor.close()
            return url_list

    def selectDbOne(self, sql):
        """ 数据库查询 一条"""
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql)  # 返回 查询数据 条数 可以根据 返回值 判定处理结果

            data = self.cursor.fetchone()
        except:
            print('Error: unable to fecth data')
        finally:
            self.cursor.close()
            return data[0]

    def closeDb(self):
        """ 数据库连接关闭 """
        self.db.close()
